BenchmarkDotNet するやつ
#dotnet #csharp #filebasedapps
#!/usr/bin/env -S dotnet run -c Release
#:package [email protected]
#:property PublishAot=false
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Toolchains.InProcess.Emit;
var config = DefaultConfig.Instance
.AddJob(Job.ShortRun.WithToolchain(InProcessEmitToolchain.Instance));
BenchmarkRunner.Run<SortBenchmark>(config);
[MemoryDiagnoser]
public class SortBenchmark
{
private int[] _data = null!;
[Params(100, 1000)]
public int N;
[GlobalSetup]
public void Setup()
{
var random = new Random(42);
_data = Enumerable.Range(0, N).Select(_ => random.Next()).ToArray();
}
[Benchmark(Baseline = true)]
public int[] ArraySort()
{
var copy = (int[])_data.Clone();
Array.Sort(copy);
return copy;
}
[Benchmark]
public int[] ArraySortWithComparer()
{
var copy = (int[])_data.Clone();
Array.Sort(copy, Comparer<int>.Default);
return copy;
}
[Benchmark]
public int[] LinqOrderByStatic()
{
return [.. _data.OrderBy(static x => x)];
}
[Benchmark]
public int[] LinqOrderBy()
{
return [.. _data.OrderBy(x => x)];
}
[Benchmark]
public int[] SpanSort()
{
var copy = (int[])_data.Clone();
copy.AsSpan().Sort();
return copy;
}
}